#include "editordatos.h"
#include "dialogo.h"
#include <assert.h>

EditorDatos::EditorDatos(QWidget* ventanaPadre)
{
    this->ventanaPadre = ventanaPadre;
    panelTabla = NULL;
    dialogo = NULL;
}

EditorDatos::~EditorDatos()
{
    if (panelTabla != NULL) {
        disconnect(panelTabla);
    }

    if (dialogo != NULL) {
        delete dialogo;
    }
}

void EditorDatos::setPanelTabla(PanelTabla* panelTabla)
{
    assert(this->panelTabla == NULL);

    if (panelTabla != NULL) {
        connect(panelTabla, SIGNAL(seleccionado()), this, SLOT(seleccionado()));
    }

    this->panelTabla = panelTabla;
}

void EditorDatos::inicializarParaEdicion()
{
    prepararTabla(panelTabla, true);
    panelTabla->inicializar();

    connect(panelTabla, SIGNAL(anadir()), this, SLOT(anadir()));
    connect(panelTabla, SIGNAL(nuevo()), this, SLOT(nuevo()));
    connect(panelTabla, SIGNAL(modificar()), this, SLOT(modificar()));
    connect(panelTabla, SIGNAL(copiar()), this, SLOT(copiar()));
    connect(panelTabla, SIGNAL(eliminar()), this, SLOT(eliminar()));
    connect(panelTabla, SIGNAL(subir()), this, SLOT(subir()));
    connect(panelTabla, SIGNAL(bajar()), this, SLOT(bajar()));
    connect(panelTabla, SIGNAL(actualizar()), this, SLOT(actualizar()));
    connect(panelTabla, SIGNAL(seleccionado()), this, SLOT(seleccionado()));
}

void EditorDatos::inicializarParaSeleccion()
{
    prepararTabla(panelTabla, false);
    panelTabla->inicializar();
}

bool EditorDatos::mostrarDialogo(const QString& titulo, bool edicion, int tipoDialogo)
{
    assert(panelTabla == NULL);
    
    panelTabla = new PanelTabla();
    
    if (edicion) {
        inicializarParaEdicion();
    } else {
        inicializarParaSeleccion();
    }

    panelTabla->setTitulo(titulo); 
    
	if (tipoDialogo < 0) {
		tipoDialogo = edicion ? DIALOGO_TIPO_SALIR : DIALOGO_TIPO_ACEPTAR_CANCELAR;
	}
    dialogo = new Dialogo(ventanaPadre, tipoDialogo);
    dialogo->setContenido(panelTabla);    
    dialogo->setIdentificador(getIdentificadorDialogo(edicion));
    dialogo->exec();

    panelTabla = NULL;

    return dialogo->aceptado();
}